/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * ExamenComplementarioPresentacion.java
 *
 * Created on 27/12/2010, 09:34:54
 */

package presentacion.tratamiento_y_practica;

import com.toedter.calendar.IDateEditor;
import hibernate.objeto.CuidadoDeInternacion;
import hibernate.objeto.DiagnosticoYTriageInternacion;
import hibernate.objeto.TratamientoQuirurgico;
import hibernate.objeto.TratamientoYPractica;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Calendar;
import java.util.Date;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JSpinner.DefaultEditor;
import javax.swing.RowFilter;
import javax.swing.SpinnerDateModel;
import javax.swing.table.TableRowSorter;
import logica.CapaLogica;
import logica.CuidadoDeInternacionLogica;
import logica.TratamientoQuirurgicoLogica;
import logica.TratamientoYPracticaLogica;
import logica.validacion.CapaValidacion;
import presentacion.CapaPresentacion;
import presentacion.utilidad.maquetado.Fuente;
import presentacion.utilidad.maquetado.Icono;
import presentacion.utilidad.maquetado.InformeError;
import presentacion.utilidad.BarMenu;
import presentacion.utilidad.MensajePresentacion;
import presentacion.utilidad.Paginador;
import presentacion.utilidad.tabla.MiModeloTabla;

/**
 *
 * @author usuario
 */
public class TratamientoYPracticaPresentacion extends javax.swing.JDialog {

    /** Creates new form ExamenComplementarioPresentacion */
    public TratamientoYPracticaPresentacion( 
            java.awt.Frame parent, boolean modal,
            DiagnosticoYTriageInternacion diagnosticoYTriageInternacion) {
        super(parent, modal);

        this.diagnosticoYTriageInternacion = diagnosticoYTriageInternacion;

        initComponents();
        setSize(CapaPresentacion.getTamañoMaximoJDialog());
        setLocationRelativeTo(null);

        personalizarGUI();
        setearEventosQueCapturanTeclaEnterYEscape();
    }

    /**
     * Setea datos de la ventana.
     *
     */
    private void personalizarGUI() {
        this.setJMenuBar(BarMenu.createMenuBarTratamientoYPractica(this));

        iniciarPaginador();
        
        cargarTratamientoYPracticaEnTabla();

        botonCargarTratamientoYPractica.setVisible(false);

        if (CapaPresentacion.modoCarga) {
            modoCarga();
        } else if (CapaPresentacion.modoVisualizacion) {
            modoVisualizacion();
        }
    }

    /**
     * Setea la ventana en modo visualización.
     *
     */
    private void modoVisualizacion() {
        textoDescriptivoCargaTratamientoYPractica.setText("Seleccione un" +
                " tratamiento para ver sus propiedades");
        CapaPresentacion.personalizarBotonesEnVisualizacion(
                botonAceptar, botonCancelar);
        botonCargarTratamientoYPractica.setEnabled(false);
        setearEstadoCampos(false);
        botonCancelar.requestFocus();
    }

     /**
     * Setea la ventana en modo carga.
     *
     */
    private void modoCarga() {
        horaTratamientoYPractica.getModel().setValue(new Date());
        fechaTratamientoYPractica.setDate(new Date());
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        panelVisualizacionTratamientoYPractica = new javax.swing.JPanel();
        textoDescriptivoVisualizacionTratamientoYPractica = new javax.swing.JLabel();
        textoFiltrar = new javax.swing.JLabel();
        filtrar = new javax.swing.JTextField();
        tablaTratamientoYPracticaScrollPane = new javax.swing.JScrollPane();
        tablaTratamientoYPractica = new javax.swing.JTable(new MiModeloTabla());
        paginadorUno = new javax.swing.JPanel();
        botonAnteriorPaginadorUno = new javax.swing.JButton();
        botonSiguientePaginadorUno = new javax.swing.JButton();
        textoDescriptivoCargaTratamientoYPractica = new javax.swing.JLabel();
        botonCargarTratamientoYPractica = new javax.swing.JButton();
        botonAceptar = new javax.swing.JButton();
        botonCancelar = new javax.swing.JButton();
        panelTipoTratamientoYPractica = new javax.swing.JPanel();
        panelExamenComplementarioInternoScrollPane = new javax.swing.JScrollPane();
        panelTratamientoYPracticaInterno = new javax.swing.JPanel();
        textoHoraYFechaTratamientoYPractica = new javax.swing.JLabel();
        SpinnerDateModel spinerModel = new SpinnerDateModel(new Date(0, 0, 0, Calendar.HOUR_OF_DAY, 0, 0), null, null, Calendar.HOUR_OF_DAY);
        horaTratamientoYPractica = new javax.swing.JSpinner(spinerModel);
        fechaTratamientoYPractica = new com.toedter.calendar.JDateChooser();
        textoTipoTratamientoYPractica = new javax.swing.JLabel();
        tipoTratamientoYPractica = new javax.swing.JComboBox();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Tratamientos y Prácticas");
        setMinimumSize(new java.awt.Dimension(965, 717));
        setResizable(false);

        panelVisualizacionTratamientoYPractica.setMinimumSize(new java.awt.Dimension(1004, 156));

        textoDescriptivoVisualizacionTratamientoYPractica.setFont(Fuente.FUENTE_TITULO_2);
        textoDescriptivoVisualizacionTratamientoYPractica.setForeground(Fuente.COLOR_NORMAL);
        textoDescriptivoVisualizacionTratamientoYPractica.setText("Lista de tratamientos y prácticas que posee el paciente");
        textoDescriptivoVisualizacionTratamientoYPractica.setPreferredSize(new java.awt.Dimension(500, 20));

        textoFiltrar.setFont(Fuente.FUENTE_LABEL);
        textoFiltrar.setText("Filtrar");
        textoFiltrar.setPreferredSize(new java.awt.Dimension(28, 20));

        filtrar.setToolTipText("Filtra los datos encontrados por algún criterio");
        filtrar.setPreferredSize(new java.awt.Dimension(200, 20));
        filtrar.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                filtrarKeyReleased(evt);
            }
        });

        tablaTratamientoYPracticaScrollPane.setPreferredSize(new java.awt.Dimension(984, 90));

        tablaTratamientoYPractica.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaTratamientoYPracticaMouseClicked(evt);
            }
        });
        tablaTratamientoYPractica.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                tablaTratamientoYPracticaKeyReleased(evt);
            }
        });
        tablaTratamientoYPracticaScrollPane.setViewportView(tablaTratamientoYPractica);

        paginadorUno.setMaximumSize(new java.awt.Dimension(700, 14));

        botonAnteriorPaginadorUno.setFont(new java.awt.Font("Tahoma", 0, 10));
        botonAnteriorPaginadorUno.setIcon(Icono.ICONO_16_ANTERIOR);
        botonAnteriorPaginadorUno.setPreferredSize(new java.awt.Dimension(43, 23));
        botonAnteriorPaginadorUno.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAnteriorPaginadorUnoActionPerformed(evt);
            }
        });

        botonSiguientePaginadorUno.setFont(new java.awt.Font("Tahoma", 0, 10));
        botonSiguientePaginadorUno.setIcon(Icono.ICONO_16_SIGUIENTE);
        botonSiguientePaginadorUno.setPreferredSize(new java.awt.Dimension(43, 23));
        botonSiguientePaginadorUno.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonSiguientePaginadorUnoActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout paginadorUnoLayout = new javax.swing.GroupLayout(paginadorUno);
        paginadorUno.setLayout(paginadorUnoLayout);
        paginadorUnoLayout.setHorizontalGroup(
            paginadorUnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(paginadorUnoLayout.createSequentialGroup()
                .addComponent(botonAnteriorPaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(botonSiguientePaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
        paginadorUnoLayout.setVerticalGroup(
            paginadorUnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(paginadorUnoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(botonAnteriorPaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(botonSiguientePaginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        javax.swing.GroupLayout panelVisualizacionTratamientoYPracticaLayout = new javax.swing.GroupLayout(panelVisualizacionTratamientoYPractica);
        panelVisualizacionTratamientoYPractica.setLayout(panelVisualizacionTratamientoYPracticaLayout);
        panelVisualizacionTratamientoYPracticaLayout.setHorizontalGroup(
            panelVisualizacionTratamientoYPracticaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelVisualizacionTratamientoYPracticaLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelVisualizacionTratamientoYPracticaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(tablaTratamientoYPracticaScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(panelVisualizacionTratamientoYPracticaLayout.createSequentialGroup()
                        .addComponent(textoDescriptivoVisualizacionTratamientoYPractica, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 252, Short.MAX_VALUE)
                        .addComponent(textoFiltrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(filtrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(paginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        panelVisualizacionTratamientoYPracticaLayout.setVerticalGroup(
            panelVisualizacionTratamientoYPracticaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelVisualizacionTratamientoYPracticaLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelVisualizacionTratamientoYPracticaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE, false)
                    .addComponent(filtrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoFiltrar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoDescriptivoVisualizacionTratamientoYPractica, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(tablaTratamientoYPracticaScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(paginadorUno, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        MiModeloTabla.inicializarTabla(tablaTratamientoYPractica);

        textoDescriptivoCargaTratamientoYPractica.setFont(Fuente.FUENTE_TITULO_2);
        textoDescriptivoCargaTratamientoYPractica.setForeground(Fuente.COLOR_NORMAL);
        textoDescriptivoCargaTratamientoYPractica.setText("Ingrese los datos del tratamiento y práctica");
        textoDescriptivoCargaTratamientoYPractica.setPreferredSize(new java.awt.Dimension(500, 23));

        botonCargarTratamientoYPractica.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonCargarTratamientoYPractica.setForeground(Fuente.COLOR_NORMAL);
        botonCargarTratamientoYPractica.setIcon(Icono.ICONO_16_AGREGAR);
        botonCargarTratamientoYPractica.setMnemonic('e');
        botonCargarTratamientoYPractica.setText("Agregar tratamiento");
        botonCargarTratamientoYPractica.setToolTipText("Agrega los datos para cargar un examen complementario");
        botonCargarTratamientoYPractica.setPreferredSize(new java.awt.Dimension(175, 20));
        botonCargarTratamientoYPractica.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonCargarTratamientoYPracticaActionPerformed(evt);
            }
        });

        botonAceptar.setFont(Fuente.FUENTE_BOTON_EXTERNO);
        botonAceptar.setForeground(Fuente.COLOR_NORMAL);
        botonAceptar.setIcon(Icono.ICONO_16_ACEPTAR);
        botonAceptar.setMnemonic('a');
        botonAceptar.setText("Aceptar");
        botonAceptar.setToolTipText("Agrega el examen complementario");
        botonAceptar.setPreferredSize(new java.awt.Dimension(110, 23));
        botonAceptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAceptarActionPerformed(evt);
            }
        });

        botonCancelar.setFont(Fuente.FUENTE_BOTON_EXTERNO);
        botonCancelar.setForeground(Fuente.COLOR_NORMAL);
        botonCancelar.setIcon(Icono.ICONO_16_CANCELAR);
        botonCancelar.setMnemonic('c');
        botonCancelar.setText("Cancelar");
        botonCancelar.setToolTipText("Cancela la operación");
        botonCancelar.setPreferredSize(new java.awt.Dimension(110, 23));
        botonCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonCancelarActionPerformed(evt);
            }
        });

        panelExamenComplementarioInternoScrollPane.setBorder(null);
        panelExamenComplementarioInternoScrollPane.setPreferredSize(new java.awt.Dimension(984, 384));

        panelTratamientoYPracticaInterno.setPreferredSize(new java.awt.Dimension(893, 320));
        panelTratamientoYPracticaInterno.setLayout(new javax.swing.BoxLayout(panelTratamientoYPracticaInterno, javax.swing.BoxLayout.LINE_AXIS));
        panelExamenComplementarioInternoScrollPane.setViewportView(panelTratamientoYPracticaInterno);

        textoHoraYFechaTratamientoYPractica.setFont(Fuente.FUENTE_LABEL);
        textoHoraYFechaTratamientoYPractica.setForeground(Fuente.COLOR_NORMAL);
        textoHoraYFechaTratamientoYPractica.setText("Hora y fecha");
        textoHoraYFechaTratamientoYPractica.setPreferredSize(new java.awt.Dimension(95, 20));

        JSpinner.DateEditor horaDeMuerte = new JSpinner.DateEditor(horaTratamientoYPractica, "HH:mm:ss");
        horaTratamientoYPractica.setEditor(horaDeMuerte);
        horaTratamientoYPractica.setFont(Fuente.FUENTE_TEXTFIELD);
        horaTratamientoYPractica.setPreferredSize(new java.awt.Dimension(64, 20));

        fechaTratamientoYPractica.setToolTipText("");
        fechaTratamientoYPractica.setMaxSelectableDate(new Date());
        fechaTratamientoYPractica.setMinSelectableDate(new java.util.Date(-2208985673000L));
        fechaTratamientoYPractica.setPreferredSize(new java.awt.Dimension(144, 20));

        textoTipoTratamientoYPractica.setFont(Fuente.FUENTE_LABEL);
        textoTipoTratamientoYPractica.setForeground(Fuente.COLOR_NORMAL);
        textoTipoTratamientoYPractica.setText("Tipo");
        textoTipoTratamientoYPractica.setPreferredSize(new java.awt.Dimension(95, 20));

        tipoTratamientoYPractica.setFont(Fuente.FUENTE_COMBOBOX);
        tipoTratamientoYPractica.setForeground(Fuente.COLOR_NORMAL);
        tipoTratamientoYPractica.setModel(CapaPresentacion.getListaDeTipoTratamientoYPractica());
        tipoTratamientoYPractica.setPreferredSize(new java.awt.Dimension(150, 20));
        tipoTratamientoYPractica.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                tipoTratamientoYPracticaActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout panelTipoTratamientoYPracticaLayout = new javax.swing.GroupLayout(panelTipoTratamientoYPractica);
        panelTipoTratamientoYPractica.setLayout(panelTipoTratamientoYPracticaLayout);
        panelTipoTratamientoYPracticaLayout.setHorizontalGroup(
            panelTipoTratamientoYPracticaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelTipoTratamientoYPracticaLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelTipoTratamientoYPracticaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(panelExamenComplementarioInternoScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(panelTipoTratamientoYPracticaLayout.createSequentialGroup()
                        .addGroup(panelTipoTratamientoYPracticaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addComponent(textoHoraYFechaTratamientoYPractica, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(textoTipoTratamientoYPractica, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(panelTipoTratamientoYPracticaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addGroup(panelTipoTratamientoYPracticaLayout.createSequentialGroup()
                                .addComponent(horaTratamientoYPractica, javax.swing.GroupLayout.PREFERRED_SIZE, 94, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(fechaTratamientoYPractica, javax.swing.GroupLayout.PREFERRED_SIZE, 118, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(tipoTratamientoYPractica, 0, 175, Short.MAX_VALUE))
                        .addGap(38, 38, 38)))
                .addContainerGap())
        );
        panelTipoTratamientoYPracticaLayout.setVerticalGroup(
            panelTipoTratamientoYPracticaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelTipoTratamientoYPracticaLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelTipoTratamientoYPracticaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoTipoTratamientoYPractica, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(tipoTratamientoYPractica, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelTipoTratamientoYPracticaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(horaTratamientoYPractica, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(fechaTratamientoYPractica, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoHoraYFechaTratamientoYPractica, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(panelExamenComplementarioInternoScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(panelTipoTratamientoYPractica, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(panelVisualizacionTratamientoYPractica, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(botonAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(botonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(textoDescriptivoCargaTratamientoYPractica, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 329, Short.MAX_VALUE)
                        .addComponent(botonCargarTratamientoYPractica, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(panelVisualizacionTratamientoYPractica, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoDescriptivoCargaTratamientoYPractica, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonCargarTratamientoYPractica, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(panelTipoTratamientoYPractica, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void botonCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonCancelarActionPerformed
        this.dispose();
}//GEN-LAST:event_botonCancelarActionPerformed

    private void botonAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAceptarActionPerformed
        //Resetea paginador
        Paginador.paginarElemento[0] = false;
        agregarTratamientoYPractica();
}//GEN-LAST:event_botonAceptarActionPerformed

    /**
     * Al agregarse un nuevo tratamiento se actualiza la tabla y se
     * selecciona por defecto el examen agregado mostrandose las propiedades del
     * mismo.
     */
    private void actualizarTratamientoYPracticaCargado() {
        cargarTratamientoYPracticaEnTabla();

        while(!MiModeloTabla.seleccionarFilaDeTabla(String.valueOf(
                tratamientoYPracticaACargar.getIdTratamientoYPractica()),
                tablaTratamientoYPractica, tablaTratamientoYPracticaScrollPane)) {
                paginarAdelanteTablaTratamientoYPractica();
        }
        cargarOVerPropiedadesTratamientoYPractica();
    }

    private void tablaTratamientoYPracticaMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaTratamientoYPracticaMouseClicked
        cargarOVerPropiedadesTratamientoYPractica();
}//GEN-LAST:event_tablaTratamientoYPracticaMouseClicked

    private void tablaTratamientoYPracticaKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tablaTratamientoYPracticaKeyReleased
        if (evt.getKeyCode() == KeyEvent.VK_UP
                || evt.getKeyCode() == KeyEvent.VK_DOWN) {
            cargarOVerPropiedadesTratamientoYPractica();
        }
}//GEN-LAST:event_tablaTratamientoYPracticaKeyReleased

    /**
     * Al seleccionar una objeto TratamientoYPractica de la tabla deben
     * inhabilitarse los campos de carga. Si el objeto es nulo se permite el
     * ingresos de los datos.
     * 
     */
    private void cargarOVerPropiedadesTratamientoYPractica() {

        resetearPanelesEstudiosInternos();

        //Recupera lo seleccionado de tabla
        tratamientoYPracticaAVisualizar = (TratamientoYPractica)
                MiModeloTabla.recuperarObjetoDeTabla(
                TratamientoYPractica.class.getName(), tablaTratamientoYPractica);

        if (tratamientoYPracticaAVisualizar == null && (
                CapaPresentacion.modoCarga)) {
            botonCargarTratamientoYPractica.setVisible(false);
            habilitarCarga();
        } else if (tratamientoYPracticaAVisualizar == null &&
                CapaPresentacion.modoVisualizacion) {
            textoDescriptivoCargaTratamientoYPractica.setText("Seleccione un" +
                " tratamiento para ver sus propiedades");
            limpiarPantalla();
            botonCargarTratamientoYPractica.setVisible(false);
        } else if (tratamientoYPracticaAVisualizar != null &&
                CapaPresentacion.modoVisualizacion) {
            habilitarVisualizacion();
            botonCargarTratamientoYPractica.setVisible(false);
        } else if (tratamientoYPracticaAVisualizar != null &&
                CapaPresentacion.modoModificacion) {
            habilitarModificacion();
            botonCargarTratamientoYPractica.setVisible(true);
        }
    }

    /**
     * Habilita los campos necesarios para cargar un tratamiento.
     *
     */
    public void habilitarCarga() {
        if (CapaPresentacion.modoCarga || CapaPresentacion.modoModificacion) {
            tratamientoYPracticaAVisualizar = null;
            textoDescriptivoCargaTratamientoYPractica.setText(
                    "Ingrese los datos del tratamiento y práctica");

            setearEstadoCampos(true);
            CapaPresentacion.personalizarBotonesEnCargaDeDatos(
                    botonAceptar, botonCancelar);

            limpiarPantalla();

            //Deselecciona lo seleccionado en la tabla
            tablaTratamientoYPractica.clearSelection();
            botonCargarTratamientoYPractica.setVisible(false);
            eliminarPanel();
            datosTratamientoQuirurgicoPanel = null;
            datosCuidadosDeInternacionPanel = null;
            tratamientoYPracticaACargar = null;
        }
    }

    /**
     * Habilita los campos necesarios para visualizar propiedades de
     * un tratamiento.
     *
     */
    private void habilitarVisualizacion() {
        textoDescriptivoCargaTratamientoYPractica.setText("Propiedades");
        setearEstadoCampos(false);
        exhibirDatosEnPantalla(tratamientoYPracticaAVisualizar);
        //TRATAMIENTO QUIRURGICO
        if (tratamientoYPracticaAVisualizar.getTratamientoQuirurgico() != null) {
            eliminarPanel();
            agregarPanel(panelTratamientoYPracticaInterno,
                    new DatosTratamientoQuirurgicoPanel(tratamientoYPracticaAVisualizar.
                    getTratamientoQuirurgico()));
        //CUIDADOS DE INTERNACION
        } else {
            eliminarPanel();
            agregarPanel(panelTratamientoYPracticaInterno,
                    new DatosCuidadosDeInternacionPanel(tratamientoYPracticaAVisualizar.
                    getCuidadoDeInternacion()));
        }

        CapaPresentacion.personalizarBotonesEnVisualizacion(botonAceptar, botonCancelar);
    }

    /**
     * Habilita los campos necesarios para visualizar propiedades de
     * un tratamiento.
     *
     */
    private void habilitarModificacion() {
        textoDescriptivoCargaTratamientoYPractica.setText("Propiedades");
        setearEstadoCampos(true);
        exhibirDatosEnPantalla(tratamientoYPracticaAVisualizar);
        //TRATAMIENTO QUIRURGICO
        if (tratamientoYPracticaAVisualizar.getTratamientoQuirurgico() != null) {
            eliminarPanel();
            agregarPanel(panelTratamientoYPracticaInterno,
                    new DatosTratamientoQuirurgicoPanel(tratamientoYPracticaAVisualizar.
                    getTratamientoQuirurgico()));
        //CUIDADOS DE INTERNACION
        } else {
            eliminarPanel();
            agregarPanel(panelTratamientoYPracticaInterno,
                    new DatosCuidadosDeInternacionPanel(tratamientoYPracticaAVisualizar.
                    getCuidadoDeInternacion()));
        }

        CapaPresentacion.personalizarBotonesEnCargaDeDatos(botonAceptar, botonCancelar);
    }

    /**
     * Setea un campo a habilitado o inhabilitado según el parámetro. También
     * setea en Normal el color de los textos.
     *
     * @param estado El estado a setear: true para carga, false para visualizción
     */
    private void setearEstadoCampos(boolean estado) {
        textoHoraYFechaTratamientoYPractica.setForeground(Fuente.COLOR_NORMAL);
        horaTratamientoYPractica.setEnabled(estado);
        fechaTratamientoYPractica.setEnabled(estado);
        textoTipoTratamientoYPractica.setForeground(Fuente.COLOR_NORMAL);
        tipoTratamientoYPractica.setEnabled(estado);
    }

    /**
     * Limpia pantalla.
     *
     */
    private void limpiarPantalla() {
        horaTratamientoYPractica.getModel().setValue(new Date());
        fechaTratamientoYPractica.setDate(new Date());
        tipoTratamientoYPractica.setSelectedIndex(0);
    }

    /**
     * Visualiza en pantalla las distintas propiedades del objeto.
     *
     * @param tratamientoYPractica El objeto TratamientoYPractica a visualizar
     */
    private void exhibirDatosEnPantalla(TratamientoYPractica tratamientoYPractica){
        String horaEnString = tratamientoYPractica.getHoraTratamientoYPractica();
        horaTratamientoYPractica.getModel().setValue(new Date(0, 0, 0,
                CapaLogica.separarHoras(horaEnString),
                CapaLogica.separarMinutos(horaEnString),
                CapaLogica.separarSegundos(horaEnString)));
        fechaTratamientoYPractica.setDate(tratamientoYPractica.
                getFechaTratamientoYPractica());

        if (tratamientoYPractica.getTratamientoQuirurgico() != null) {
        tipoTratamientoYPractica.getModel().setSelectedItem(
                "Tratamiento quirúrgico");
        } else {
            tipoTratamientoYPractica.getModel().setSelectedItem(
                "Cuidados de internación");
        }
    }

    private void filtrarKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_filtrarKeyReleased
        TableRowSorter<MiModeloTabla> sorter = new TableRowSorter<MiModeloTabla>
                ((MiModeloTabla) tablaTratamientoYPractica.getModel());

        tablaTratamientoYPractica.setRowSorter(sorter);
        String texto = filtrar.getText();
        if (texto.length() == 0) {
            sorter.setRowFilter(null);
        } else {
            sorter.setRowFilter(RowFilter.regexFilter("(?i).*" + texto + ".*"));
        }
}//GEN-LAST:event_filtrarKeyReleased

    private void botonCargarTratamientoYPracticaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonCargarTratamientoYPracticaActionPerformed
        habilitarCarga();
        
}//GEN-LAST:event_botonCargarTratamientoYPracticaActionPerformed

    private void tipoTratamientoYPracticaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tipoTratamientoYPracticaActionPerformed
        manejarPanelesTratamientoQuirurgicoYCuidadoDeInternacion();
    }//GEN-LAST:event_tipoTratamientoYPracticaActionPerformed

    private void botonAnteriorPaginadorUnoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAnteriorPaginadorUnoActionPerformed
        paginarAtrasTablaTratamientoYPractica();
}//GEN-LAST:event_botonAnteriorPaginadorUnoActionPerformed

    private void botonSiguientePaginadorUnoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonSiguientePaginadorUnoActionPerformed
        paginarAdelanteTablaTratamientoYPractica();
}//GEN-LAST:event_botonSiguientePaginadorUnoActionPerformed

    /**
     * Se encarga de manejar los paneles de tratamiento quirúrgico y
     * cuidado de internación que
     * se agregan o se eliminan segun corresponda.
     */
    private void manejarPanelesTratamientoQuirurgicoYCuidadoDeInternacion() {
        guardaPanelTratamientoYPracticaInterno();
        eliminarPanel();
        cargaPanelTratamientoYPracticaInterno();
    }
    
    /**
     *
     * Al seleccionar un nuevo tratamiento, el panel del tratamiento actual que se
     * encuentra cargado se guarda en una variable local, para luego volver a
     * accederlo al volver a seleccionarlo.
     *
     */
    private void guardaPanelTratamientoYPracticaInterno() {
        int paneles = panelTratamientoYPracticaInterno.getComponents().length;
        if (paneles > 0) {
            JPanel panelAGuardar = (JPanel) panelTratamientoYPracticaInterno.
                    getComponents()[0];
            if (panelAGuardar instanceof DatosTratamientoQuirurgicoPanel) {
                datosTratamientoQuirurgicoPanel =
                        (DatosTratamientoQuirurgicoPanel) panelAGuardar;
            } else if (panelAGuardar instanceof DatosCuidadosDeInternacionPanel) {
                datosCuidadosDeInternacionPanel =
                        (DatosCuidadosDeInternacionPanel) panelAGuardar;
            }
        }
    }

    /**
     *
     * Carga el panel con el tipo de estudio seleccionado. Puede ser un estudio
     * de cardiologia o de laboratorio.
     *
     */
    private void cargaPanelTratamientoYPracticaInterno() {
        TratamientoQuirurgico tratamientoQuirurgico = null;
        CuidadoDeInternacion cuidadoDeInternacion = null;

       if (tratamientoYPracticaACargar != null) {
            tratamientoQuirurgico =
                    tratamientoYPracticaACargar.getTratamientoQuirurgico();
            cuidadoDeInternacion =
                    tratamientoYPracticaACargar.getCuidadoDeInternacion();
        }

        //TRATAMIENTO QUIRÚRGICO
        if (tipoTratamientoYPractica.getSelectedItem().toString().
                equalsIgnoreCase("tratamiento quirúrgico")) {
            DatosTratamientoQuirurgicoPanel datosTratamientoQuirurgicoPanelLocal =
                    new DatosTratamientoQuirurgicoPanel(tratamientoQuirurgico);
            if (datosTratamientoQuirurgicoPanel != null) {
                datosTratamientoQuirurgicoPanelLocal =
                        datosTratamientoQuirurgicoPanel;
            }
            agregarPanel(panelTratamientoYPracticaInterno,
                    datosTratamientoQuirurgicoPanelLocal);
        //CUIDADO DE INTERNACIÓN
        } else if (tipoTratamientoYPractica.getSelectedItem().toString().
                equalsIgnoreCase("cuidados de internación")) {
            DatosCuidadosDeInternacionPanel datosCuidadosDeInternacionPanelLocal =
                    new DatosCuidadosDeInternacionPanel(null);
            if (datosCuidadosDeInternacionPanel != null) {
                datosCuidadosDeInternacionPanelLocal =
                        datosCuidadosDeInternacionPanel;
            }
            agregarPanel(panelTratamientoYPracticaInterno,
                    datosCuidadosDeInternacionPanelLocal);
        }
    }

    /**
     * Agrega un panel al panelTratamientoYPracticaInterno.
     *
     * @param panelContenedor El panel que contiene al panel que se agregará
     * @param panelComponente El panel componente que se agregará
     *
     */
    private void agregarPanel(JPanel panelContenedor, JPanel panelComponente) {
        panelContenedor.add(panelComponente);
        panelContenedor.revalidate();
        panelContenedor.repaint();
    }

    /**
     *
     * Quita el panel al panelTratamientoYPracticaInterno.
     *
     */
    private void eliminarPanel() {
        int paneles = panelTratamientoYPracticaInterno.getComponents().length;
        if (paneles > 0) {
            panelTratamientoYPracticaInterno.remove(
                    panelTratamientoYPracticaInterno.getComponents()[0]);
            panelTratamientoYPracticaInterno.revalidate();
            panelTratamientoYPracticaInterno.repaint();
        }
    }

    /**
     * Agrega un examen complementario.
     * 
     */
    private void agregarTratamientoYPractica() {
        //Valida todos los campos
        if (validarCampos()) {
            if (confirmarModificacion()) {
            //Carga toda la información de la pantalla
            recopilarInformacion();
            int[] idTratamientoYPractica = new int[1];
            if (tratamientoYPracticaAVisualizar != null) {
                    //Modificación de tratamientoYPractica
                    idTratamientoYPractica[0] =
                            tratamientoYPracticaAVisualizar.
                            getIdTratamientoYPractica();
                } else {
                    //Alta de tratamientoYPractica
                    idTratamientoYPractica[0] = -1;
                }
            if (TratamientoYPracticaLogica.agregarTratamientoYPractica(
                    datosTratamientoYPractica,
                    tratamientoYPracticaAVisualizar,
                    idTratamientoYPractica,
                    diagnosticoYTriageInternacion)) {
                tratamientoYPracticaACargar = TratamientoYPracticaLogica.
                        getTratamientoYPracticaPorId(idTratamientoYPractica[0]);
                //Setea en el tratamiento creado un tratamiento quirúrgico o
                //un cuidado de internación
                if (setearTratamientoQuirurgicoOCuidadoDeInternacion()) {
                    if (tratamientoYPracticaAVisualizar != null) {
                        resetearPanelesEstudiosInternos();
                    }
                    actualizarTratamientoYPracticaCargado();
                }
            }
        }
        //Errores
        } else {
            MensajePresentacion.errorDatosInvalidos();
        }
    }

    /**
     * Si corresponde setea en el tratamiento y practica un tratamiento
     * quirúrgico o un cuidado de internación.
     */
    private boolean setearTratamientoQuirurgicoOCuidadoDeInternacion() {
        boolean retorno = true;
        //Si esta seteado el campo tipo en tratamiento quirúrgico
        //Se agrega un objeto tratamiento quirúrgico y se setea a un
        //Tratamiento y práctica
        if (tipoTratamientoYPractica.getSelectedItem().toString().
                equalsIgnoreCase("tratamiento quirúrgico")) {
            int[] idTratamientoQuirurgicoCreado =
                    new int[1];
            if (agregarTratamientoQuirurgico(
                    idTratamientoQuirurgicoCreado)) {
               tratamientoYPracticaACargar.setTratamientoQuirurgico(
                        TratamientoQuirurgicoLogica.
                        getTratamientoQuirurgicoPorId(
                        idTratamientoQuirurgicoCreado[0]));
            } else {
                retorno = false;
            }
        }
        //Si esta seteado el campo tipo en cuidados de internación
        //Se agrega un objeto cuidado de internacion y se setea a un
        //Tratamiento y práctica
        if (tipoTratamientoYPractica.getSelectedItem().toString().
                equalsIgnoreCase("cuidados de internación")) {
            int[] idCuidadoDeInternacionCreado =
                    new int[1];
            if (agregarCuidadoDeInternacion(
                    idCuidadoDeInternacionCreado)) {
             tratamientoYPracticaACargar.setCuidadoDeInternacion(
                        CuidadoDeInternacionLogica.
                        getCuidadoDeInternacionPorId(
                        idCuidadoDeInternacionCreado[0]));
            } else {
                retorno = false;
            }

        }
        return retorno;
    }

    /**
     * Agrega un tratamiento quirúrgico.
     *
     * @param idObjetoCreado El id del objeto que se crea
     * @return true si se agregó correctamente, false en caso contrario
     */
    private boolean agregarTratamientoQuirurgico(int[] idObjetoCreado) {
        JPanel panelATratar = (JPanel) panelTratamientoYPracticaInterno.
                    getComponents()[0];
                return ((DatosTratamientoQuirurgicoPanel) panelATratar).
                        agregarTratamientoQuirurgico(idObjetoCreado);
    }

    /**
     * Agrega un cuidado de internación.
     *
     * @param idObjetoCreado El id del objeto que se crea
     * @return true si se agregó correctamente, false en caso contrario
     */
    private boolean agregarCuidadoDeInternacion(int[] idObjetoCreado) {
        JPanel panelATratar = (JPanel) panelTratamientoYPracticaInterno.
                    getComponents()[0];
                return ((DatosCuidadosDeInternacionPanel) panelATratar).
                        agregarCuidadosDeInternacion(idObjetoCreado);
    }

    /**
     * Valida los datos teniendo en cuenta que pueden existir exámenes
     * de cardiología y de laboratorio.
     *
     * @return true si esta listo para cargarse, false en caso contrario
     */
    private boolean validarCampos() {
        boolean validarCamposTratamientoYPractica =
                validarCamposTratamientoYPractica();
        boolean validarCamposCuidadosDeInternacionYTratamientosQuirurgicos =
                validarCamposCuidadosDeInternacionYTratamientosQuirurgicos();
        return validarCamposCuidadosDeInternacionYTratamientosQuirurgicos &&
                validarCamposTratamientoYPractica;
    }

    /**
     * Realiza la validación de los datos
     * 
     * @return true si esta listo para cargarse, false en caso contrario
     */
    private boolean validarCamposTratamientoYPractica() {
        boolean esFechaValida = false;
        boolean esTipoValido = false;

        //Manejo de la validación de fecha
        if (!CapaValidacion.validarFecha(fechaTratamientoYPractica.getDate(), null, true)) {
            textoHoraYFechaTratamientoYPractica.setForeground(
                    Fuente.COLOR_ERROR);
            textoHoraYFechaTratamientoYPractica.setToolTipText(InformeError.
                    INFORME_ERROR_USO_COMUN_HORA_Y_FECHA);
            esFechaValida = false;
        } else {
            textoHoraYFechaTratamientoYPractica.setForeground(
                    Fuente.COLOR_NORMAL);
            textoHoraYFechaTratamientoYPractica.setToolTipText(null);
            esFechaValida = true;
        }

        //Manejo de la validación del area
        if (!CapaValidacion.validarCampoObligatorio(
                tipoTratamientoYPractica.getSelectedItem().toString())) {
            textoTipoTratamientoYPractica.setForeground(
                    Fuente.COLOR_ERROR);
            textoTipoTratamientoYPractica.setToolTipText(InformeError.
                    INFORME_ERROR_TRATAMIENTO_TIPO);
            esTipoValido = false;
        } else {
            textoTipoTratamientoYPractica.setForeground(
                    Fuente.COLOR_NORMAL);
            textoTipoTratamientoYPractica.setToolTipText(null);
            esTipoValido = true;
        }

        
        return esFechaValida && esTipoValido;
    }

    /**
     * Realiza la validación de los datos
     *
     * @return true si esta listo para cargarse, false en caso contrario
     */
    private boolean validarCamposCuidadosDeInternacionYTratamientosQuirurgicos() {
        int paneles = panelTratamientoYPracticaInterno.getComponents().length;
        if (tipoTratamientoYPractica.getSelectedItem().toString().
                equalsIgnoreCase("tratamiento quirúrgico")
                || tipoTratamientoYPractica.getSelectedItem().toString().
                equalsIgnoreCase("cuidados de internación")) {
            if (paneles > 0) {
                JPanel panelAValidar = (JPanel) panelTratamientoYPracticaInterno.
                        getComponents()[0];
                if (tipoTratamientoYPractica.getSelectedItem().toString().
                        equalsIgnoreCase("cuidados de internación")) {
                    return ((DatosCuidadosDeInternacionPanel) panelAValidar).
                            validarCamposCuidadosInternacion();
                } else if (tipoTratamientoYPractica.getSelectedItem().toString().
                        equalsIgnoreCase("tratamiento quirúrgico")) {
                    return ((DatosTratamientoQuirurgicoPanel) panelAValidar).
                            validarCamposTratamientoQuirurgico();
                }  else {
                    return true;
                }
            } else {
                return false;
            }
        } else {
            return true;
        }
    }

    /**
     * En caso de tratarse de una madificación debe verificarse que realmente
     * se quiera modificar.
     *
     * @return true si se debe modificar, false en caso contrario
     */
    public boolean confirmarModificacion() {
        boolean retorno = false;
        if (tratamientoYPracticaAVisualizar != null) {
            //Confirmar modificación
            int confirmado = MensajePresentacion.confimarModificacionObjeto(
                    "tratamiento y práctica", "el");
            if (JOptionPane.OK_OPTION == confirmado) {
                retorno = true;
            } else {
                retorno = false;
            }
        } else {
            retorno = true;
        }

        return retorno;
    }

    /**
     * Carga todos los datos ingresados en pantalla.
     *
     */
    private void recopilarInformacion() {
        datosTratamientoYPractica = new Object[8];

        datosTratamientoYPractica[
                CapaLogica.EXAMEN_COMPLEMENTARIO_HORA] =
                CapaLogica.separarTiempo(
                horaTratamientoYPractica.getValue().toString());

        datosTratamientoYPractica[
                CapaLogica.EXAMEN_COMPLEMENTARIO_FECHA] =
                fechaTratamientoYPractica.getDate();
    }

    /**
     * Setea en cada componente del JDialog los eventos que capturarán la tecla
     * enter y escape.
     */
    private void setearEventosQueCapturanTeclaEnterYEscape() {
        //Declaración del evento a capturar
        KeyListener keyListenerEnter = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                    agregarTratamientoYPractica();
                }
            }
        };
        //Declaración del evento a capturar
        KeyListener keyListenerEscape = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
                    dispose();
                }
            }
        };

        //Setear eventos
        filtrar.addKeyListener(keyListenerEnter);
        filtrar.addKeyListener(keyListenerEscape);
        tablaTratamientoYPractica.addKeyListener(keyListenerEscape);

        botonAnteriorPaginadorUno.addKeyListener(keyListenerEscape);
        botonSiguientePaginadorUno.addKeyListener(keyListenerEscape);

        ((DefaultEditor) horaTratamientoYPractica.getEditor()).
                getTextField().addKeyListener(keyListenerEnter);
        ((DefaultEditor) horaTratamientoYPractica.getEditor()).
                getTextField().addKeyListener(keyListenerEscape);

        ((IDateEditor) fechaTratamientoYPractica.getDateEditor()).
                getUiComponent().addKeyListener(keyListenerEnter);
        ((IDateEditor) fechaTratamientoYPractica.getDateEditor()).
                getUiComponent().addKeyListener(keyListenerEscape);

        tipoTratamientoYPractica.addKeyListener(keyListenerEscape);

        botonAceptar.addKeyListener(keyListenerEscape);
        botonCancelar.addKeyListener(keyListenerEscape);
    }
    
    private void cargarTratamientoYPracticaEnTabla() {
        //Si corresponde vuelve a cero el indice del paginador, de lo contrario
        //Lo deja en el valor que se encuentra
        Paginador.actualizaIndice(0);
        //Carga la tabla de TramientoYPractica
        MiModeloTabla.cargarTablaTratamientoYPractica(
                TratamientoYPracticaLogica.
                getVectorTratamientoYPracticaPorIdDiagnosticoYTriageInternacion(
                diagnosticoYTriageInternacion.getIdDiagnosticoYTriageInternacion()),
                tablaTratamientoYPractica);
    }

    /**
     * Inicia el/los paginadores activos en esta ventana
     */
    private void iniciarPaginador() {
        //Rango de filas para cada paginador
        int rangoFilas[] = new int[CapaLogica.PAGINADOR_PAGINADORES_SIMULTANEOS];

        //Rango de filas para el paginador 1
        rangoFilas[0] = 5;
        //Rango de filas para el paginador 2
        rangoFilas[1] = 10;
        //Rango de filas para el paginador 3
        rangoFilas[2] = 0;

        Paginador.inicializarPaginador(rangoFilas);
    }

    /**
     * Realiza la paginación hacia atrás.
     */
    private void paginarAtrasTablaTratamientoYPractica() {
        //Retrocede el los índices
        Paginador.atrasPaginador(0);
        Paginador.paginarElemento[0] = true;

        //Vuelve a buscar con los nuevos índices
        if (tablaTratamientoYPractica.getModel().getColumnCount() > 0) {
               cargarTratamientoYPracticaEnTabla();
        }
    }

    /**
     * Realiza la paginación hacia adelante, teniendo en cuenta que existan elementos,
     * de lo contrario no procede a listarlos.
     */
    private void paginarAdelanteTablaTratamientoYPractica() {
        //Adelanta los índices
        Paginador.adelantePaginador(0);
        Paginador.paginarElemento[0] = true;

        //Vuelve a buscar con los nuevos índices
        if (tablaTratamientoYPractica.getModel().getColumnCount() > 0) {
                //Si no hay elementos siguientes se vuelven los índices hacia atras
                if (TratamientoYPracticaLogica.
                    getVectorTratamientoYPracticaPorIdDiagnosticoYTriageInternacion(
                    diagnosticoYTriageInternacion.
                        getIdDiagnosticoYTriageInternacion()) == null) {
                    Paginador.atrasPaginador(0);
                }
                cargarTratamientoYPracticaEnTabla();
        }
    }

    /**
     * Reseta los paneles internos.
     */
    private void resetearPanelesEstudiosInternos() {
        //Se trata de una modificacion, reinicio los paneles internos
        datosCuidadosDeInternacionPanel = null;
        datosTratamientoQuirurgicoPanel = null;
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botonAceptar;
    private javax.swing.JButton botonAnteriorPaginadorUno;
    private javax.swing.JButton botonCancelar;
    private javax.swing.JButton botonCargarTratamientoYPractica;
    private javax.swing.JButton botonSiguientePaginadorUno;
    private com.toedter.calendar.JDateChooser fechaTratamientoYPractica;
    private javax.swing.JTextField filtrar;
    private javax.swing.JSpinner horaTratamientoYPractica;
    private javax.swing.JPanel paginadorUno;
    private javax.swing.JScrollPane panelExamenComplementarioInternoScrollPane;
    private javax.swing.JPanel panelTipoTratamientoYPractica;
    private javax.swing.JPanel panelTratamientoYPracticaInterno;
    private javax.swing.JPanel panelVisualizacionTratamientoYPractica;
    private javax.swing.JTable tablaTratamientoYPractica;
    private javax.swing.JScrollPane tablaTratamientoYPracticaScrollPane;
    private javax.swing.JLabel textoDescriptivoCargaTratamientoYPractica;
    private javax.swing.JLabel textoDescriptivoVisualizacionTratamientoYPractica;
    private javax.swing.JLabel textoFiltrar;
    private javax.swing.JLabel textoHoraYFechaTratamientoYPractica;
    private javax.swing.JLabel textoTipoTratamientoYPractica;
    private javax.swing.JComboBox tipoTratamientoYPractica;
    // End of variables declaration//GEN-END:variables
    private Object[] datosTratamientoYPractica;
    private DiagnosticoYTriageInternacion diagnosticoYTriageInternacion;
    private TratamientoYPractica tratamientoYPracticaACargar;
    private TratamientoYPractica tratamientoYPracticaAVisualizar;
    private DatosTratamientoQuirurgicoPanel datosTratamientoQuirurgicoPanel;
    private DatosCuidadosDeInternacionPanel datosCuidadosDeInternacionPanel;
   }